package fsmsim.dataStructure;

/**
 * <p>Title: FSMSim</p>
 *
 * <p>Description: Simulatore di macchine a stati finiti.</p>
 *
 * <p>Copyright: Copyright (c) 2008</p>
 *
 * <p>Company: Bollati, Donati, Gabrielli, Peli</p>
 *
 * @author Bollati, Donati, Gabrielli, Peli
 * @version 3.0
 */

public interface Container {

    
    /**
     * Da settare per scegliere tra i vari tipi di contenitori...
     */

    public static final int CONTAINER_TYPE = 0;
    //public static final int CONTAINER_TYPE = 1;

    
    /**
     * Aggiunge un elemento nel contenitore
     * @param aElement
     */

    public void addElement(Element aElement);

    
    /**
     * Aggiunge un elemento nel contenitore in una determinata posizione
     * @param aElement
     * @param position
     */

    public void addElement(Element aElement,int position);
    
    
    /**
     * Elimina un elemento dal contenitore
     * @param aElement
     */

    public void removeElement(Element aElement);

    
    /**
     * Preleva un elemento dal contenitore
     * @return
     */

    public Element drawElement();


    /**
     * Ritorna l'elemento ad un certo indice
     * @param index
     * @return
     */

    public Element getElement(int index);

    
    /**
     * Ritorna la lunghezza del contenitore
     * @return
     */

    public int size();

    
    /**
     * Ritorna l'indice di un elemento presente nel contenitore
     * @param aElement
     * @return
     */

    public int indexOfElement(Element aElement);

    
    /**
     * Restituisce gli elementi che fanno match con l'elemento passato 
     * @param aElement
     * @return
     */

    public Container searchElement(Element aElement);
    
    
    /**
     * Verifica che l'elemento passo sia contenuto nella struttura dati contenitore
     * @param aElement
     * @return
     */
    
    public boolean containsElement(Element aElement);

}
